package com.xiangge.demo;

/**
 * @author xiangge
 * @version 1.0
 * @date 2025/3/18 8:59
 * @description    构造方法
 *       引入： 定义一个狗类,然后创建狗类的对象，运行之后，反编译看结果
 *       结果分析： com.xiangge.demo.Dog();    -- 无参构造方法
 *
 *       构造方法的格式：
 *            public 类名(形式参数){
 *                方法体;
 *            }
 *       注意事项：
 *           1. 构造方法没有返回值，连void都不能写   后面再讲
 *           2. 构造方法的名字必须集合类名相同
 *           3. 实际开发中，一般情况下,只写无参和满参构造,其他构造方法根据题目需求添加
 *
 *       构造方法调用：
 *            说明： 构造方法使用new关键字调用：
 *                   -- new Dog();  调用无参构造
 *                   -- new Dog("旺财", 3);  调用有参构造
 *        构造方法的作用：
 *            对象的本质：  容器
 *                  可以存： 属性和行为
 *            构造方法的作用：
 *                  给对象做显示初始化 - 给对象的属性赋值
 *            new关键字的执行过程：
 *                 1. 开辟对象的空间,分配内存地址值
 *                 2. 将该对象对应在方法区的字节码中的属性和行为存入对象空间
 *                 3. 给属性做默认初始化操作
 */
public class OOPDemo1 {
    public static void main(String[] args) {
        Dog dog = new Dog(); // 0x38
        dog.name = "旺财";
        dog.age = 2;
        dog.show(); // 姓名为：旺财, 年龄为：2
        Dog dog2 = new Dog("旺财", 3);
        System.out.println("dog2.name = " + dog2.name);
        System.out.println("dog2.age = " + dog2.age);

    }
}
/**
 * @description 这是一个狗类事物描述类
 */
class Dog{
    // 属性
    public String name;
    public int age;

    // 无参构造方法
    public  Dog(){

    }

    // 有参构造方法: 满参构造
    public Dog(String name , int a){
        this.name = name;
        this.age = a;
    }
    // 行为
    public void show(){
        System.out.println("姓名为：" + name + ", 年龄为：" + age);
    }
}
